import _turf from '@/utils/turfUtil'
import { hangxianServer } from '@/api'
// import { zrtqData } from './zrtq'

//航线类型：，1-文旅观光 2-载人通勤 3-物流运输 4-政务巡检 5-飞行验证
export async function addHangxian(type) {
  const res = await hangxianServer()
  const data = res.data.filter((item) => item.airspaceType == type)
  let lines = []
  data.forEach((item) => {
    let line = item.naviLine.split('_')
    let lineArr = []
    line.forEach((item02) => {
      let coord = item02.split(',')
      let coordinates = _turf.transform([Number(coord[0]), Number(coord[1])])
      let newcoordinates = [Number(coordinates[0]), Number(coordinates[1]), Number(coord[2]) || 300]
      lineArr.push(newcoordinates)
    })
    lines.push(lineArr)
  })
  __g.polyline.clear()
  const hangxianPolylines = []
  let pArr = []
  const colors = {
    1: '#007eff',
    2: '#ef85ff',
    3: '#00cc66',
    4: '#f8fb00',
    5: '#ffa04c'
  }
  lines.forEach((item, index) => {
    // let l = {
    //   id: 'hangxian' + index, //折线唯一标识id
    //   coordinates: item, //构成折线的坐标点数组
    //   coordinateType: 0, //坐标系类型，取值范围：0为Projection类型，1为WGS84类型，2为火星坐标系(GCJ02)，3为百度坐标系(BD09)，默认值：0
    //   range: [1, 1000000], //可视范围：[近裁距离, 远裁距离]，取值范围: [任意负值, 任意正值]
    //   color: '#00a5fa', //折线颜色
    //   thickness: 1, //折线宽度
    //   intensity: 0.3, //亮度
    //   flowRate: 0.5, //流速
    //   shape: 0, //折线类型 0：直线， 1：曲线
    //   depthTest: false, //是否做深度检测 开启后会被地形高度遮挡
    //   style: 3, //折线样式 参考样式枚举：PolylineStyle
    //   tiling: 0 //材质贴图平铺比例
    //   // scale: 100 // 缩放
    // }
    // let s = {
    //   id: 'hangxian' + index,
    //   coordinateType: 0,
    //   coordinates: item,
    //   range: [1, 1000000],
    //   style: 15,
    //   scale: 60
    // }
    // hangxianPolylines.push(l)

    //自定义材质的折线
    let p2 = {
      id: 'hangxian' + index, //折线唯一标识id
      coordinates: item, //构成折线的坐标点数组
      coordinateType: 0, //坐标系类型，取值范围：0为Projection类型，1为WGS84类型，2为火星坐标系(GCJ02)，3为百度坐标系(BD09)，默认值：0
      range: [1, 10000000], //可视范围：[近裁距离, 远裁距离]，取值范围: [任意负值, 任意正值]
      thickness: 500, //折线宽度
      intensity: 5,
      color: colors[type],
      shape: 1, //折线类型 0：直线， 1：曲线  注意：设置为曲线非常影响添加效率
      depthTest: false, //是否做深度检测 开启后会被地形高度遮挡
      style: 1, //折线样式 参考样式枚举：PolylineStyle
      tiling: 0, //材质贴图平铺比例
      userData: JSON.stringify(item)
    }
    pArr.push(p2)
  })
  await __g.polyline.add(pArr)

  console.log('%c [ pArr ]-75', 'font-size:13px; background:pink; color:#bf2c9f;', pArr)
  console.log('航线添加成功', pArr)
  // await __g.splineMesh.add(hangxianPolylines)
  // await __g.splineMesh.add(hangxianPolylines)
  //   __g.camera.set(530684.046563, 2497999.2925, 6989.030625, -81.117752, -120.563927, 2)
}

export function clear() {
  console.log('航线清除成功')
  //   __g.polyline.clear()
  //   __g.splineMesh.clear()
  //   __g.marker3d.clear()
  __g.reset(1)
}

let selfLine = [
  [
    [525120.075313, 2498739.305938, 300],
    [527531.903438, 2500338.759063, 300]
  ],
  [
    [524080.455937, 2495427.73625, 300],
    [524094.126563, 2497100.550625, 300]
  ],
  [
    [524018.8675, 2495526.065859, 300],
    [524315.1775, 2495181.942354, 300],
    [524865.44625, 2495763.993125, 300],
    [525123.673125, 2495468.214063, 300],
    [525294.218125, 2495444.356172, 300],
    [526079.754375, 2496140.431563, 300],
    [526198.28125, 2496484.585781, 300],
    [527313.436875, 2497423.170313, 300],
    [528239.95, 2496325.712344, 300],
    [529854.383125, 2496364.346094, 300],
    [530959.244688, 2497043.921406, 300],
    [531256.633125, 2498763.726875, 300],
    [530948.15375, 2499159.921875, 300],
    [531570.455, 2499772.637812, 300],
    [531388.475625, 2499999.075312, 300],
    [531612.940937, 2499824.596875, 300],
    [532163.759062, 2500282.21625, 300],
    [532600.962187, 2499828.606562, 300],
    [533000.632656, 2499890.896875, 300],
    [533234.754219, 2500136.1675, 300],
    [533406.0975, 2500514.8925, 300],
    [533394.033906, 2500799.84875, 300]
  ]
]

// 自己手动画线
export const addSelfLine = async () => {
  let pArr = []
  peopleList.forEach((item, index) => {
    //自定义材质的折线
    let p2 = {
      id: item.id, //折线唯一标识id
      coordinates: item.coor, //构成折线的坐标点数组
      coordinateType: 0, //坐标系类型，取值范围：0为Projection类型，1为WGS84类型，2为火星坐标系(GCJ02)，3为百度坐标系(BD09)，默认值：0
      range: [1, 10000000], //可视范围：[近裁距离, 远裁距离]，取值范围: [任意负值, 任意正值]
      thickness: 500, //折线宽度
      intensity: 5,
      color: '#00cc66',
      shape: 1, //折线类型 0：直线， 1：曲线  注意：设置为曲线非常影响添加效率
      depthTest: false, //是否做深度检测 开启后会被地形高度遮挡
      style: 1, //折线样式 参考样式枚举：PolylineStyle
      tiling: 0, //材质贴图平铺比例
      userData: JSON.stringify(item)
    }
    pArr.push(p2)
  })

  setTimeout(() => {
    __g.polyline.add(pArr)
    addCusObjectDa(peopleList)
    cusObjectDaMove(peopleList)
    updateMarkerText()
    let markerArr = []
    let o1 = {
      id: 'm2',
      groupId: 'marker3dTest',
      text: '云海公园', //3D标注显示文字
      textSize: 32, //3D标注显示文字大小
      textColor: [0, 204 / 255, 102 / 255, 1], //3D标注显示文字颜色
      textOutlineSize: 1, //3D标注显示文字轮廓大小
      textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
      textFixed: false, // 3D标注显示文字是否固定文本朝向
      fixedSize: false, // 默认尺寸 非近大远小
      textVisible: true, //3D标注显示文字是否显示文本
      textLocation: [0, 0, 500], // 文字位置
      textRotation: [0, 90, 0], // 文字旋转
      textScale: [10, 10, 10], // 文字缩放
      pointName: 'Point_B_4', //3D标注展示的特效名称
      pointVisible: true, //3D标注是否显示
      pointScale: 100, //3D标注整体缩放比例
      coordinate: [527649.6925, 2500256, 377.937578125], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
      coordinateType: 0, //坐标系类型
      range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
      autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
    }
    markerArr.push(o1)

    let o2 = {
      id: 'm3',
      groupId: 'marker3dTest',
      text: '保惠物流园', //3D标注显示文字
      textSize: 32, //3D标注显示文字大小
      textColor: [0, 204 / 255, 102 / 255, 1], //3D标注显示文字颜色
      textOutlineSize: 1, //3D标注显示文字轮廓大小
      textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
      textFixed: false, // 3D标注显示文字是否固定文本朝向
      fixedSize: false, // 默认尺寸 非近大远小
      textVisible: true, //3D标注显示文字是否显示文本
      textLocation: [0, 0, 500], // 文字位置
      textRotation: [0, 90, 0], // 文字旋转
      textScale: [10, 10, 10], // 文字缩放
      pointName: 'Point_B_4', //3D标注展示的特效名称
      pointVisible: true, //3D标注是否显示
      pointScale: 100, //3D标注整体缩放比例
      coordinate: [525379.36, 2498800.64, 407.30140625], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
      coordinateType: 0, //坐标系类型
      range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
      autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
    }
    markerArr.push(o2)

    let o3 = {
      id: 'm4',
      groupId: 'marker3dTest',
      text: '壹海城', //3D标注显示文字
      textSize: 32, //3D标注显示文字大小
      textColor: [0, 204 / 255, 102 / 255, 1], //3D标注显示文字颜色
      textOutlineSize: 1, //3D标注显示文字轮廓大小
      textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
      textFixed: false, // 3D标注显示文字是否固定文本朝向
      fixedSize: false, // 默认尺寸 非近大远小
      textVisible: true, //3D标注显示文字是否显示文本
      textLocation: [0, 0, 500], // 文字位置
      textRotation: [0, 90, 0], // 文字旋转
      textScale: [10, 10, 10], // 文字缩放
      pointName: 'Point_B_4', //3D标注展示的特效名称
      pointVisible: true, //3D标注是否显示
      pointScale: 100, //3D标注整体缩放比例
      coordinate: [524045.4, 2495181.6, 299.99984375], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
      coordinateType: 0, //坐标系类型
      range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
      autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
    }
    markerArr.push(o3)

    let o4 = {
      id: 'm5',
      groupId: 'marker3dTest',
      text: '恩上公园', //3D标注显示文字
      textSize: 32, //3D标注显示文字大小
      textColor: [0, 204 / 255, 102 / 255, 1], //3D标注显示文字颜色
      textOutlineSize: 1, //3D标注显示文字轮廓大小
      textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
      textFixed: false, // 3D标注显示文字是否固定文本朝向
      fixedSize: false, // 默认尺寸 非近大远小
      textVisible: true, //3D标注显示文字是否显示文本
      textLocation: [0, 0, 500], // 文字位置
      textRotation: [0, 90, 0], // 文字旋转
      textScale: [10, 10, 10], // 文字缩放
      pointName: 'Point_B_4', //3D标注展示的特效名称
      pointVisible: true, //3D标注是否显示
      pointScale: 100, //3D标注整体缩放比例
      coordinate: [524075.59500000003, 2497048.8000000003, 300.000078125], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
      coordinateType: 0, //坐标系类型
      range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
      autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
    }
    markerArr.push(o4)

    let o5 = {
      id: 'm6',
      groupId: 'marker3dTest',
      text: '大梅沙海滨公园', //3D标注显示文字
      textSize: 32, //3D标注显示文字大小
      textColor: [0, 204 / 255, 102 / 255, 1], //3D标注显示文字颜色
      textOutlineSize: 1, //3D标注显示文字轮廓大小
      textOutlineColor: Color.Black, // 3D标注显示文字轮廓颜色
      textFixed: false, // 3D标注显示文字是否固定文本朝向
      fixedSize: false, // 默认尺寸 非近大远小
      textVisible: true, //3D标注显示文字是否显示文本
      textLocation: [0, 0, 500], // 文字位置
      textRotation: [0, 90, 0], // 文字旋转
      textScale: [10, 10, 10], // 文字缩放
      pointName: 'Point_B_4', //3D标注展示的特效名称
      pointVisible: true, //3D标注是否显示
      pointScale: 100, //3D标注整体缩放比例
      coordinate: [531161.26, 2499560.64, 308.52414062500003], //3D标注的坐标位置 注意：若坐标Z设置高度为0时 autoHeight=true则会显示在物体上方
      coordinateType: 0, //坐标系类型
      range: [1, 100000000], //3D标注的可视距离范围：[min,max]，单位：米
      autoHeight: false //自动判断下方是否有物体，设置正确高度，默认值：false
    }
    markerArr.push(o5)

    __g.marker3d.add(markerArr)
    __g.marker3d.callBPFunction([
      {
        id: 'm2',
        functionName: '颜色',
        parameters: [{ paramType: 6, paramValue: [0, 204 / 255, 102 / 255, 1] }]
      },
      {
        id: 'm3',
        functionName: '颜色',
        parameters: [{ paramType: 6, paramValue: [0, 204 / 255, 102 / 255, 1] }]
      },
      {
        id: 'm4',
        functionName: '颜色',
        parameters: [{ paramType: 6, paramValue: [0, 204 / 255, 102 / 255, 1] }]
      },
      {
        id: 'm5',
        functionName: '颜色',
        parameters: [{ paramType: 6, paramValue: [0, 204 / 255, 102 / 255, 1] }]
      },
      {
        id: 'm6',
        functionName: '颜色',
        parameters: [{ paramType: 6, paramValue: [0, 204 / 255, 102 / 255, 1] }]
      }
    ])
  }, 2000)
}

/**
 * 大梅沙直升机坐标
 */
export const peopleList = [
  {
    id: '物流无人机',
    coor: [
      [524018.8675, 2495526.065859, 300],
      [524315.1775, 2495181.942354, 300],
      [524865.44625, 2495763.993125, 300],
      [525123.673125, 2495468.214063, 300],
      [525294.218125, 2495444.356172, 300],
      [526079.754375, 2496140.431563, 300],
      [526198.28125, 2496484.585781, 300],
      [527313.436875, 2497423.170313, 300],
      [528239.95, 2496325.712344, 300],
      [529854.383125, 2496364.346094, 300],
      [530959.244688, 2497043.921406, 300],
      [531256.633125, 2498763.726875, 300],
      [530948.15375, 2499159.921875, 300],
      [531570.455, 2499772.637812, 300],
      [531388.475625, 2499999.075312, 300],
      [531612.940937, 2499824.596875, 300],
      [532163.759062, 2500282.21625, 300],
      [532600.962187, 2499828.606562, 300],
      [533000.632656, 2499890.896875, 300],
      [533234.754219, 2500136.1675, 300],
      [533406.0975, 2500514.8925, 300],
      [533394.033906, 2500799.84875, 300]
    ],
    jd: 80,
    name: '物流无人机',
    imagePath: window.origin + `/poi/qjss_lenged_05.png`,
    popupURL:
      window.origin +
      '/popup/zhishenji.html?parmas=' +
      encodeURIComponent(
        JSON.stringify({
          id: '物流无人机',
          name: '物流无人机'
        })
      ),
    assetPath: '/JC_CustomAssets/ObjectLibrary/Exhibition/盐田低空无人机/无人机2',
    groupId1: 'CusObjectDaGroupWLYS',
    groupId2: 'CusObjectDaMarkerWLYS'
  },
  {
    id: '物流无人机1',
    coor: [
      [525120.075313, 2498739.305938, 300],
      [526325.9893755, 2499539.0325005, 300],
      [527531.903438, 2500338.759063, 300]
    ],
    jd: 80,
    name: '物流无人机1',
    imagePath: window.origin + `/poi/qjss_lenged_05.png`,
    popupURL:
      window.origin +
      '/popup/zhishenji.html?parmas=' +
      encodeURIComponent(
        JSON.stringify({
          id: '物流无人机1',
          name: '物流无人机1'
        })
      ),
    assetPath: '/JC_CustomAssets/ObjectLibrary/Exhibition/盐田低空无人机/无人机2',
    groupId1: 'CusObjectDaGroupWLYS',
    groupId2: 'CusObjectDaMarkerWLYS'
  },
  {
    id: '物流无人机2',
    coor: [
      [524080.455937, 2495427.73625, 300],
      [524087.29125, 2496264.1434375, 300],
      [524094.126563, 2497100.550625, 300]
    ],
    jd: 80,
    name: '物流无人机2',
    imagePath: window.origin + `/poi/qjss_lenged_05.png`,
    popupURL:
      window.origin +
      '/popup/zhishenji.html?parmas=' +
      encodeURIComponent(
        JSON.stringify({
          id: '物流无人机2',
          name: '物流无人机2'
        })
      ),
    assetPath: '/JC_CustomAssets/ObjectLibrary/Exhibition/盐田低空无人机/无人机2',
    groupId1: 'CusObjectDaGroupWLYS',
    groupId2: 'CusObjectDaMarkerWLYS'
  }
]

/**
 * 添加飞行器
 */
export const addCusObjectDa = async (List) => {
  let pList = []
  let pList1 = []
  List.forEach(async (item, index) => {
    item.coor.forEach(async (it, i) => {
      if (i === 0) {
        let o = {
          id: item.id, //自定义对象唯一id
          pakFilePath: '@path:DTS_Library.pak',
          assetPath: item.assetPath,
          location: item[1], //位置坐标
          coordinateType: 0, // 坐标系类型
          rotation: [0, 0, 0], // 世界坐标系旋转
          range: [0, 10000000], //可见范围
          groupId: item.groupId1, //分组id
          localRotation: [0, item.jd, 0], //模型自身旋转
          scale: [1, 1, 1], //模型缩放
          isEffectRotation: true, //是否开启旋转效果
          smoothMotion: 1, //1: 平滑移动，0: 跳跃移动
          supportAttach: false, //不支持贴画贴合
          visible: true, //模型加载后默认是否显示
          autoHeight: false //是否开启自动高度 开启后自动贴地不再使用坐标Z
        }
        pList.push(o)
        let o1 = {
          id: item.id, //maker唯一标识
          groupId: item.groupId2,
          coordinate: item[1], //坐标位置
          coordinateType: 0, //坐标系类型
          imagePath: item.imagePath, //图片路径
          anchors: [-25, 50],
          imageSize: [50, 50],
          fixedSize: true,
          text: '',
          fontColor: '#ffffff',
          fontSize: 12,
          textRange: [1, 2000000000],
          textBackgroundColor: '#b67c34',
          range: [1, 2000000000], //标签的可见范围 [Min,Max]
          autoHidePopupWindow: true,
          autoHeight: false,
          occlusionCull: false,
          popupURL: item.popupURL, //弹窗HTML链接
          // popupBackgroundColor: [1.0, 1.0, 1.0, 0.5],//弹窗背景颜色
          popupSize: [250, 180], //弹窗大小
          popupOffset: [-130, -100], //弹窗偏移
          showLine: false, //标注点下方是否显示垂直牵引线
          displayMode: 4, //智能显示模式  开发过程中请根据业务需求判断使用四种显示模式
          clusterByImage: true, // 聚合时是否根据图片路径分类，即当多个marker的imagePath路径参数相同时按路径对marker分类聚合
          priority: 0 //避让优先级
        }
        pList1.push(o1)
      }
    })
  })
  __g.customObject.add(pList)
  __g.marker.add(pList1)

  pList.forEach(async (item) => {
    __g.customObject.callBPFunction([
      {
        id: item.id,
        functionName: '状态',
        parameters: [
          { paramType: 0, paramValue: 1 },
          { paramType: 3, paramValue: 2 }
        ]
      }
    ])
    __g.marker.setAttachCustomObject([
      {
        markerId: item.id, //标注id
        objectId: item.id, //自定义对象id
        offset: [0, item.id.includes('evtol') ? -0.05 : 0, 0] //偏移量
      }
    ])
  })
}

//更新标签内容
function random(m, n) {
  return Number(m + Math.random() * (n - m)).toFixed(1)
}

export const updateMarkerText = () => {
  if (window.timer) {
    clearInterval(window.timer)
  }
  window.timer = null
  window.timer = setInterval(() => {
    peopleList.forEach((item) => {
      __g.marker.update({
        id: item.id,
        text: `类型：无人机\n高度：${random(50, 70)}m\n速度：${random(6, 10)}m/s`
      })
    })
  }, 2000)
}

/**
 * 飞行器行走
 * @param List 列表
 * @param speedPeople 速度
 */
export const cusObjectDaMove = async (List, speedPeople = 40) => {
  List.forEach((item, index) => {
    //构造移动路径点数组
    let pathPointArr = []
    let sum = 0
    for (let i = 1; i < item.coor.length - 1; i++) {
      //构造数组元素 每1秒移动一次
      let elementPoint = { time: sum, coordinate: item.coor[i] }
      pathPointArr.push(elementPoint)
      sum += computedDistance(item.coor[i], item.coor[i + 1]) / speedPeople
    }
    // 最后一项
    let elementPoint = {
      time: sum + (sum / item.coor.length - 1),
      coordinate: item.coor[item.coor.length - 1]
    }
    pathPointArr.push(elementPoint)

    //车辆按GPS轨迹移动
    __g.customObject.startMove(List[index].id, 0, pathPointArr)
    // __g.customObject.focus(peopleList[0].id)
  })
}

/**
 * 计算投影坐标中空间两点的距离
 */
const computedDistance = (coord1, coord2) => {
  const [x1, y1, z1] = coord1
  const [x2, y2, z2] = coord2

  const deltaX = x2 - x1
  const deltaY = y2 - y1
  const deltaZ = z2 - z1

  const distance = Math.sqrt(deltaX ** 2 + deltaY ** 2 + deltaZ ** 2)
  return distance
}

/**
 * 点击出现弹框
 * @param e
 */
export const showWLYSDialog = async (e) => {
  if (e.GroupID === 'CusObjectDaMarkerWLYS') {
    clearInterval(window.timer)
    __g.polyline.setThickness(e.Id, -1)
    __g.customObject.focus(e.Id, -1)
    return
  }
}
